// ... existing code ...
package electricity.jwtutils;

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;

import javax.crypto.SecretKey;
import java.util.Date;

@Slf4j
public class JwtUtils {

    // 自动生成满足 HS512 要求的安全密钥（512 bits 以上）
    private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS512);

    // 过期时间：1小时（单位毫秒）
    private static final long EXPIRATION = 3600000;

    /**
     * 生成 JWT Token
     * @param username 用户名
     * @return token字符串
     */
    public static String getToken(String username) {
        String token = Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION))
                .signWith(SECRET_KEY, SignatureAlgorithm.HS512)
                .compact();

        log.info("Generated JWT Token: {}", token);
        return token;
    }

    /**
     * 解析并获取用户名
     * @param token token字符串
     * @return 用户名
     */
    public static String getUserName(String token) {
        try {
            return Jwts.parserBuilder()
                    .setSigningKey(SECRET_KEY)
                    .build()
                    .parseClaimsJws(token)
                    .getBody()
                    .getSubject();
        } catch (JwtException e) {
            log.error("JWT 解析失败: {}", token, e);
            throw new RuntimeException("无效的 Token");
        }
    }
}
